package queue;

import java.util.LinkedList;
import java.util.Queue;

//用队列模拟栈,队列是先进先出,栈则是先进后出(这个问题没什么实际意思,只是为了考察思维)
//解题思路:准备两个队列,为队列A和队列B,入栈时,把所有元素都入到队列A中,出栈时,因为是出最后进入队列A的元素
//因此,除了队列A中的最后一个元素,把其他元素都移到B中,这时候删除A的最后一个元素,再交换A和B即可,这样的话,
//能保证每次执行完以后,B都是空的,元素都在A中.而对于取栈顶元素来说,只需要增加一步,那就是在删除A中的最后一个元素
//前,再把其加到B中,之后A和B再调换位置,这样取出了最后一个元素,队列A的元素也没有发生变化
public class MyStack {
    private Queue<Integer> A = new LinkedList<>();

    private Queue<Integer> B = new LinkedList<>();

    public MyStack(){

    }
    private void swap(){
        Queue<Integer> tmp = A;
        A = B;
        B =tmp;
    }

    public void push(int x){
        A.offer(x);
    }

    public int pop(){
        //出栈的时候,判定是否为空
        if(empty()){
            return 0;
        }
        //把A中的元素往B中倒腾,直到A剩下最后一个元素
        while(A.size() > 1){
            B.offer(A.poll());
        }
        swap();
        return A.poll();
    }

    public int top(){
        if(empty()){
            return 0;
            //Oj题本身是不能抛出异常的,这里只能return 0
            //通常,这种情况也不可能出现
        }
        while(A.size() > 1){
            B.offer(A.poll());
        }
        int ret = A.peek();
        B.offer(A.poll());
        swap();
        return ret;

    }

    public boolean empty(){
        return A.isEmpty();
    }




}
